#include "input.h"


  void getInput()
 {
    SDL_Event event;

    while (SDL_PollEvent(&event))
    {
        switch (event.type)
        {
            case SDL_QUIT:
                cleanup();
            break;

            case SDL_KEYDOWN:
                switch (event.key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        input.escape = 1;
                    break;

                    case SDLK_SPACE:
                        input.jump = 1;
                    break;

                      case SDLK_v:
                        input.attack = 1;
                    break;

                    case SDLK_LEFT:
                        input.left = 1;
                    break;

                    case SDLK_RIGHT:
                        input.right = 1;
                    break;

                    case SDLK_DOWN:
                        input.down = 1;
                    break;

                    case SDLK_UP:
                        input.up = 1;
                    break;

                    case SDLK_RETURN:
                        input.enter = 1;
                    break;
                }
            break;

            case SDL_KEYUP:
                switch (event.key.keysym.sym)
                {
                    case SDLK_SPACE:
                        input.jump = 0;
                    break;

                    case SDLK_LEFT:
                        input.left = 0;
                    break;

                    case SDLK_RIGHT:
                        input.right = 0;
                    break;

                    case SDLK_DOWN:
                        input.down = 0;
                    break;

                    case SDLK_UP:
                        input.up = 0;
                    break;

                    case SDLK_RETURN:
                        input.enter = 0;
                    break;
                }
            break;
        }
    }
 }

 void updatePlayer(void)
{
    if (player.timerMort == 0)
    {
        player.etat = IDLE;
        player.dirX = 0;
        player.dirY += GRAVITY_SPEED;

        if (player.dirY >= MAX_FALL_SPEED)
        {
            player.dirY = MAX_FALL_SPEED;
        }

        if (input.left == 1)
        {
            player.etat = WALK;
            player.dirX -= PLAYER_SPEED;

            if(player.direction == RIGHT)
            {
                player.direction = LEFT;
                player.frameNumber = 0;
                player.sprite = player.res[LEFT];
            }
        }
        else if (input.right == 1)
        {
            player.etat = WALK;
            player.dirX += PLAYER_SPEED;

            if(player.direction == LEFT)
            {
                player.direction =  RIGHT;
                player.frameNumber = 0;
                player.sprite = player.res[RIGHT];
            }
        }

        if(input.attack == 1)
        {
            createFireBall();
            input.attack = 0;
        }

        if (input.jump == 1 && player.onGround == 1)
        {
            player.etat = JUMP;
            player.dirY = -JUMP_HEIGHT;
            player.onGround = 0;
        }
    
        mapCollision(&player);
        centerScrollingOnPlayer();
    }

    if (player.timerMort > 0)
    {
        player.timerMort--;
        if (player.timerMort == 1)
        {
            jeu.vies--;
            player.timerMort = 0;
            initializePlayer();
        }
    }

    if(jeu.vies == 0 || jeu.time <= 0)
    {
        drawImage(jeu.gameOver,0,0);
        SDL_Flip(jeu.screen);
        while(!(input.enter))
        {
            getInput();
        }
        input.enter = 0;
        drawMenu();
    }
}


void updateMonsters(void)
{
    int i,a;

    //On passe en boucle tous les monstres du tableau
    for ( i = 0; i < jeu.nombreMonstres; i++ )
    {
        //Même fonctionnement que pour le joueur
        if (mob[i].timerMort == 0)
        {

            mob[i].dirX = 0;
            mob[i].dirY += GRAVITY_SPEED;


            if (mob[i].dirY >= MAX_FALL_SPEED)
                mob[i].dirY = MAX_FALL_SPEED;
            
            if(mob[i].x == mob[i].LastX)
            {
                if(mob[i].direction == LEFT)
                {
                    mob[i].direction = RIGHT;
                    mob[i].sprite = mob[i].res[RIGHT];
                }
                else
                {
                    mob[i].direction = LEFT;
                    mob[i].sprite = mob[i].res[LEFT];
                }
            }

            if(mob[i].direction == LEFT)
            {
                mob[i].dirX = -2;
            }
            else
            {
                mob[i].dirX = 2;
            }
            
            mob[i].LastX = mob[i].x;
            
            if (collide(&player, &mob[i]) == 1)
            {
                //On met le timer à 1 pour tuer le joueur intantanément
                player.timerMort = 60;
            }
            else if (collide(&player, &mob[i]) == 2)
            {
                //On met le timer à 1 pour tuer le monstre intantanément
                mob[i].timerMort = 1;
            }

            // Test de collision monstre-boule de feu
            for ( a = 0; a < jeu.nombreFireballs; a++ )
            {
                if (collide(&mob[i], &shuriken[a]))
                {
                    //On met le timer à 1 pour tuer le monstre intantanément
                    mob[i].timerMort = 1;
     
                    shuriken[a] = shuriken[jeu.nombreFireballs-1];
                    jeu.nombreFireballs--;
                }
            }

            //On détecte les collisions avec la map comme pour le joueur
            mapCollision(&mob[i]);

          }

        //Si le monstre meurt, on active une tempo
        if (mob[i].timerMort > 0)
        {
            mob[i].timerMort--;
            jeu.score += 5;

            /* Et on le remplace simplement par le dernier du tableau puis on
            rétrécit le tableau d'une case (on ne peut pas laisser de case vide) */
            if (mob[i].timerMort == 0)
            {
                mob[i] = mob[jeu.nombreMonstres-1];
                jeu.nombreMonstres--;
            }
        }
    }
}